#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int MAX=2e5+5;
int p2[31];
int n,m,K;
int aa[MAX],a[MAX],c[MAX];
string s[25];
vector<pii> solve1(int l,int r,int rol){
    vector<pii> res;
    if(l==r){
        res.push_back(make_pair(l,a[l]));
        return res;
    }
    int mid=(l+r)>>1;
    vector<pii> a=solve1(l,mid,rol-1),b=solve1(mid+1,r,rol-1);
    //cerr<<l<<' '<<r<<' '<<rol<<' '<<a.size()<<' '<<b.size()<<'\n';
    int k=l/(r-l+1);
    for(int i=0;i<a.size();i++)
        if(s[rol][k]=='0'&&a[i].second>=rol) res.push_back(a[i]);
    for(int i=0;i<b.size();i++)
        if(s[rol][k]=='1'&&b[i].second>=rol) res.push_back(b[i]);
    return res;
}
void solve(){
    ll ans=0;
    for(int i=1;i<=m;i++){
        int t=lower_bound(p2,p2+31,c[i])-p2;
        //cerr<<p2[t]<<'\n';
        vector<pii> res=solve1(1,p2[t],t);
        ll sum=0;
        for(pii j:res) sum+=j.first;
        ans^=i*sum;
    }
    cout<<ans<<'\n';
    return ;
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    p2[0]=1; for(int i=1;i<31;i++) p2[i]=p2[i-1]<<1;
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>aa[i];
    for(int i=1;i<=m;i++) cin>>c[i];
    K=lower_bound(p2,p2+31,n)-p2;
    for(int i=1;i<=K;i++) cin>>s[i];
    for(int i=n+1;i<=p2[K];i++) a[i]=INT_MAX;
    int T; cin>>T;
    while(T--){
        int x[4];
        for(int i=0;i<4;i++) cin>>x[i];
        for(int i=1;i<=n;i++) a[i]=aa[i]^x[i%4];
        solve();
    }
    return 0;
}